/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Clases.Envio;
import Persistencia.PersistenciaFactura;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.servlet.RequestDispatcher;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 *
 * @author JAVA
 */
public class SEnviar extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    private static final String TEMPORAL_DIR = "temp";
    private static final String DESTINO_DIR = "archivos_facturas";
    private File tmp;
    private File des;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String host = "localhost";
        String mailTo = null;
        String mailFrom = null;
        String mensaje = null;
        int insertado = 0;
        String clase = null;
        String codigo = null;




        // declaraciones de variables a utilizar para la subida de archivos    

        String rutaArchivo = null;



        // Compruebo si las carpetas existen y si no las creo
        // ************************************************************
        String ruta = getServletContext().getRealPath(TEMPORAL_DIR);
        tmp = new File(ruta);
        if (!tmp.exists()) {
            tmp.mkdir();
        }

        ruta = getServletContext().getRealPath(DESTINO_DIR);
        des = new File(ruta);
        if (!des.exists()) {
            des.mkdir();
        }

        DiskFileItemFactory dfif = new DiskFileItemFactory();
        dfif.setRepository(tmp);

        ServletFileUpload sfu = new ServletFileUpload(dfif);
        try {
            List datos = sfu.parseRequest(request);
            Iterator itr = datos.iterator();

            while (itr.hasNext()) {
                FileItem item = (FileItem) itr.next();

                if (!item.isFormField()) {
                    String[] arrStr = item.getName().split(new String("\\\\"));
                    String nombreArchivo = arrStr[arrStr.length - 1];

                    File archivo = new File(des, nombreArchivo);

                    item.write(archivo);

                    //rutaArchivo = getServletContext().getRealPath(DESTINO_DIR+"\\"+nombreArchivo);
                    rutaArchivo = getServletContext().getRealPath(DESTINO_DIR + "/" + nombreArchivo);
                } else {
                    String campo = item.getFieldName();

                    if (campo.equals("correoPa")) {
                        mailTo = item.getString();
                    }
                    if (campo.equals("mensaje")) {
                        mensaje = item.getString();
                    }
                    if (campo.equals("correoDe")) {
                        mailFrom = item.getString();
                    }
                    if (campo.equals("id")) {
                        clase = item.getString();
                    }
                    if (campo.equals("codigo")) {
                        codigo = item.getString();
                    }
                }
            }

        } catch (FileUploadException ex) {
            //Logger.getLogger(subirArchivo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            //Logger.getLogger(subirArchivo.class.getName()).log(Level.SEVERE, null, ex);
            if (ex.getMessage() == "") {
            }
        }

        Envio envio = new Envio(host, mailFrom, mailTo, mensaje, rutaArchivo, codigo);
        //insertado = PersistenciaFactura.correoFactura(request.getParameter("codigo"));
        
        insertado = envio.Send();

        
            request.setAttribute("insertado", insertado);

            RequestDispatcher rd = request.getRequestDispatcher("SVer?id=Facturas");
            rd.forward(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
